/**
 *
 * 文件名:WifiInfoServiceImpl.java
 * 包名:org.jsbd.boss.service.impl
 * 项目名:qy-crack_2.8.22.1_20160407
 * 文件说明:
 * 作者:<a href="mailto:yuanmiao@zhexinit.com" >袁淼</a>
 * 创建时间:2016年4月12日 下午7:57:40
 */
package org.jsbd.boss.service.impl;

import java.util.List;

import org.jsbd.boss.common.redis.RedisClient;
import org.jsbd.boss.dao.IWifiInfoDAO;
import org.jsbd.boss.domian.WifiInfo;
import org.jsbd.boss.service.IWifiInfoService;
import org.jsbd.boss.util.CacheKey;
import org.jsbd.boss.util.PropertiesUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 *
 * 类名:org.jsbd.boss.service.impl.WifiInfoServiceImpl
 * 
 * <pre>
 * 描述:
 * 基本思路:
 * 特别说明:
 * 编写者:<a href="mailto:yuanmiao@zhexinit.com" >袁淼</a>
 * 创建时间:2016年4月12日 下午7:57:40
 * 修改说明: 类的修改说明
 * </pre>
 */
@Service("wifiInfoService")
public class WifiInfoServiceImpl implements IWifiInfoService {

	@Autowired
	private IWifiInfoDAO wifiInfoDAO;

	@Autowired
	private RedisClient redisClient;

	private static final Integer LIMIT_COUNT = Integer.parseInt(PropertiesUtil.getValue("wifi_info_limit_count"));

	/**
	 * 
	 * TODO 覆盖方法findWifiInfo<br>
	 * 
	 * <pre>
	 * 编写者：<a href="mailto:yuanmiao@zhexinit.com" >袁淼</a>
	 * 创建时间：2016年4月13日 下午5:09:06
	 * </pre>
	 * 
	 * @param wifiInfo
	 * @return
	 * @see org.jsbd.boss.service.IWifiInfoService#findWifiInfo(org.jsbd.boss.domian.WifiInfo)
	 */
	@Override
	public WifiInfo findWifiInfo(WifiInfo wifiInfo) {
		return wifiInfoDAO.selectWifiInfo(wifiInfo);
	}

	/**
	 * 
	 * 将查询出来的wifi信息设置到队列中 <br>
	 * 
	 * <pre>
	 * 编写者：<a href="mailto:yuanmiao@zhexinit.com" >袁淼</a>
	 * 创建时间：2016年4月15日 下午3:08:00
	 * </pre>
	 * 
	 * @param randCount
	 */
	private void setRandomWifiInfoList(WifiInfo wifiInfo) {
		// 没有取到城市信息则 获取省份下的
		wifiInfo.setRandCount(LIMIT_COUNT);
		List<WifiInfo> wifiInfoList = wifiInfoDAO.selectRandomWifiInfoList(wifiInfo);
		String queueKey = CacheKey.WIFI_INFO_QUEUE_LIST_KEY + wifiInfo.getIpProvince() + "_" + wifiInfo.getIpCity();
		if (wifiInfoList == null || wifiInfoList.size() == 0) {
			wifiInfo.setIpCity(null);
			wifiInfoList = wifiInfoDAO.selectRandomWifiInfoList(wifiInfo);
		}
		if (wifiInfoList != null && wifiInfoList.size() > 0) {
			redisClient.putToQueue(queueKey, wifiInfoList.toArray());
		}
	}

	/**
	 * 
	 * 覆盖方法findRandomWifiInfo<br>
	 * 
	 * <pre>
	 * 编写者：<a href="mailto:yuanmiao@zhexinit.com" >袁淼</a>
	 * 创建时间：2016年4月15日 下午3:27:54
	 * </pre>
	 * 
	 * @param wifiInfo
	 * @return
	 * @see org.jsbd.boss.service.IWifiInfoService#findRandomWifiInfo(org.jsbd.boss.domian.WifiInfo)
	 */
	@Override
	public WifiInfo findRandomWifiInfo(WifiInfo wifiInfo) {
		String queueKey = CacheKey.WIFI_INFO_QUEUE_LIST_KEY + wifiInfo.getIpProvince() + "_" + wifiInfo.getIpCity();
		WifiInfo wifiInfo2 = (WifiInfo) redisClient.pollFromQueue(queueKey);
		if (wifiInfo2 == null) {
			setRandomWifiInfoList(wifiInfo);
			wifiInfo2 = (WifiInfo) redisClient.pollFromQueue(queueKey);
		}
		return wifiInfo2;
	}

}
